{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 演示0204：向量距离计算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 向量之间的几种距离计算\n",
    "对于两个$n$维向量$ A=(x_{11}, x_{12}, \\cdots, x_{1n}) $和$ B=(x_{21}, x_{22}, \\cdots, x_{2n}) $，它们之间的举例有多种定义方式：\n",
    "* 曼哈顿距离(manhattan)  \n",
    "$ d=\\sum_{k=1}^n | x_{1k}-x_{2k} | $  \n",
    "* 欧式距离(euclidean)，也就是*L2*范数  \n",
    "$ d= \\sqrt{\\sum_{k=1}^n (x_{1k}-x_{2k})^2 } $  \n",
    "* 闵可夫斯基距离(minkowski)，它其实包含了上述两种距离的定义  \n",
    "$ d= [\\sum_{k=1}^n |x_{1k}-x_{2k}|^p ] ^ \\frac{1}{p} $  \n",
    "* 车比雪夫距离(chebyshev)，也就是无穷范数  \n",
    "$ d=max(|x_{1k}-x_{2k}|) $  \n",
    "* 夹角余弦，用于衡量两个向量方向上到差异。夹角余弦越大，表明向量夹角越小。当两个向量方向一致时，夹角余弦取值为1；完全相反时，取值为-1  \n",
    "$ cos\\theta= \\dfrac{A*B}{|A|*|B|}=\\dfrac{\\sum_{k=1}^n x_{1k}*x_{2k}}{\\sqrt{\\sum_{k=1}^n x_{1k}^2} * \\sqrt{\\sum_{k=1}^n x_{2k}^2}} $  \n",
    "* 汉明距离(hamming)，比较两个向量中对应位置值不相同的个数  \n",
    "例如，[5, 7, 9, 0]与[5,10,8,0]之间的汉明距离为2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 空间的距离\n",
    "* 直线的方向向量和法向量：\n",
    " * 与该条直线平行的非零向量称为方向向量。记为$\\vec{v}$；与该条直线垂直的非零向量称为法向量。记为$\\vec{n}$\n",
    " * $\\vec{v}$与$\\vec{n}$的内积为0\n",
    " * 直线$Ax+By+C=0$的法向量为：$(A, B)$，方向向量为：$(-B, A)$\n",
    "* 直线及平面间的距离：\n",
    " * 二维平面上，点$P(x_0, y_0)$到直线$Ax+By+C=0$之间的距离为：  \n",
    "   $ d= \\dfrac{|Ax_0+By_0+C|}{\\sqrt{(A^2+B^2)}} $\n",
    " * 二维平面上，两条平行线$Ax+By+C_1$=0和$Ax+By+C_2=0$之间的距离为：  \n",
    "   $ d= \\dfrac{|C_1 - C_2|}{\\sqrt{(A^2+B^2)}} $\n",
    " * 扩展到N维空间，两个平行超平面$W^T X+C_1=0$和$W^T X+C_2=0$的距离为：  \n",
    "   $ d=\\dfrac{|C_1 - C_2|}{\\sqrt{(W^T W)}} $  \n",
    "   其中，$W$和$X$为具有$N$个元素的列向量  \n",
    "   使用符号：$||W||=\\sqrt{W^T W} $  \n",
    "   则上式也可表示成：$ d= \\dfrac{|C_1-C_2|}{||W||} $"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
